#include "log_in.h"

/*
用户名 log_in
参数
    name  用户
    my_pos   密码
返回值
    无
功能
    实现登陆功能
        用户通过输入 账号密码 本函数进行判断
        如果3次错误 则等待 5 s 然后重新输入
        直到输入正确 然后退出
*/
void log_in(char (*name)[128], char *my_pos)
{   
    system("clear");
    char in_name[128] = " "; // 用户输入的账号
    char in_pos[128] = " ";  // 用户输入的密码

    int flag_1 = 0;
    int num = 0;        // 用于记录输入错误的次数
    /*
    flag_1 = -98  账号正确
    flag_1 = -99  账号错误
    */
    while (1)
    {   
        int v;
        printf("尝试登录请按1,退出登录请按-1\n");
        while (1)
        {
             scanf("%d" ,&v);
            if (v==-1)
            {
                return;
            }
            else if (v==1)
            {
                break;
            }
            else 
            {printf("未识别到有效数字，请重新输入\n");}
            getchar();
        }
        
        puts("请输入你的账号");
        scanf("%s", in_name);
        for (size_t i = 0; i < 10 ; i++)
        {
            if (!strcmp(in_name, name[i]))
            {
                puts("账号正确");
                flag_1 = -98;  // 账号正确
                break;
            }
            if (i == 9)  // 这里有bug
            {
                puts("账号错误");
                flag_1 = -99;  // 账号错误
                num++;         // 记录用户输入错误的次数
            }
        }

        if (flag_1 == -98)
        {
            puts("请输入你的密码");
            scanf("%s", in_pos);
            if (!strcmp(in_pos, my_pos))
            {
                printf("恭喜这位帅哥登陆成功\n");
                main_page ();  
            }
            else
            {
                puts("密码错误");
                num++;
            }
        }
        
        if (num == 3)
        {
            num = 0;                    // 错误次数请0
            Progress_Bar( );   // 打印进度条
            // int m;
            // printf("1.继续输入\t2.退出\n");
            // scanf("%d",&m);
            // if (m==2)
            // {
            //     return;
            // }
            
        }
    }
}

/*
用户名 Progress_yBar
参数
    @x              想要显示的位置 x
    @y              想要显示的位置 y
    @time_length    想要延时的时间
返回值
    无
功能
    进度条功能
*/
void Progress_Bar( )
{
    #define NUM 100
    char buffer[NUM+1] = {0};//存储进度条字符
    char arr[5] = {"-/|\\"};//存储基本的变化字幕
    for(int i = 0;i<NUM ;++i)
    {
        buffer[i] = '#';
        printf("[%-100s][%d%%][%c]\r",buffer,i+1,arr[i%4]);
        fflush(stdout);
        usleep(50000);
    }
    printf("\n");
    return ;
}
